package com.yxx.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;

import java.util.Collections;

/**
 * Knife4j配置  接口文档配置
 * @author yuxiangxun
 * @date 2025/1/18
 * @apiNote
 */
@Configuration
@EnableSwagger2WebMvc  // 启动 Swagger2 的 WebMVC 的支持
public class Knife4jConfig {

    /**
     * 创建 Docket Bean，用于配置 Swagger2 的 API 文档生成规则
     * @return
     */
    @Bean
    public Docket createRestApi(){
        return new Docket(DocumentationType.SWAGGER_2)
                // 设置支持的协议为 HTTPS
                .protocols(Collections.singleton("https"))
                // 设置 API 文档的基本信息
                .apiInfo(apiInfo())
                // 设置 API 文档的主机地址
                .host("https://www.yxxyyds.top")
                // 设置 API 文档的分组名称
                .groupName("yxx个人博客系统接口文档")
                // 开始配置 API 的选择规则
                .select()
                // 指定扫描的控制器包路径
                .apis(RequestHandlerSelectors.basePackage("com.yxx.controller"))
                // 选择所有路径
                .paths(PathSelectors.any())
                .build();
    }


    /**
     * 创建 API 文档的基本信息
     * @return
     */
    private ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                .title("yxx个人博客系统接口文档")
                .description("基于SpringBoot + Vue开发的yxx个人博客系统项目")
                // 设置服务条款的 URL
                .termsOfServiceUrl("https://www.yxxyyds.top/api")
                // 设置联系人信息
                .contact(new Contact("小余","https://gitee.com/yu-xiangxun","3102225130@qq.com"))
                .version("2.0")
                .build();
    }
}
